package utils

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
	conf "go_mod_test/config"
)

func init(){
	// 创建数据库
	err := CreatDB()
	if err != nil {
		panic(err)
	}

	DB, err = InitDBsession()
	if err != nil{
		panic(err)
	}
}
var db *sql.DB
var DB *gorm.DB
var err error
// 读取配置
var mysql = conf.Config.GetStringMap("mysql")

func CreatDB() (err error) {

	// 连接mysql并创建数据库
	dsn := fmt.Sprintf("%s:%s@%s(%s:%d)/", mysql["username"], mysql["password"], "tcp", mysql["host"], mysql["port"])
	db, err = sql.Open("mysql", dsn)
	if err != nil {
		return err
	}
	defer db.Close()

	// 和数据库建立链接
	err = db.Ping()
	if err != nil {
		return err
	}

	creat_sql := fmt.Sprintf("create database if not exists %s default charset = %s", mysql["db"], mysql["charset"])
	_, err = db.Exec(creat_sql)
	fmt.Println(creat_sql)
	if err != nil {
		return err
	}

	return nil
}

func InitDBsession() (db *gorm.DB, err error) {
	db_string := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=%s&parseTime=True&loc=Local", mysql["username"],
		mysql["password"], mysql["host"], mysql["port"], mysql["db"], mysql["charset"])
	DBsession, err := gorm.Open("mysql", db_string)
	// 禁用默认表名的复数形式，如果置为 true，则 `User` 的默认表名是 `user`
	if err == nil{
		DBsession.SingularTable(true)
		DBsession.DB().SetMaxIdleConns(10)
		DBsession.DB().SetMaxOpenConns(100)
	}

	return DBsession, err
}



// 事务修饰器
func With_session(f func(s string)) func(s string) {

	return func(s string) {

		fmt.Println("Started")

		f(s)

		fmt.Println("Done")

	}

}

